Game Porting Toolkit
Windowsバイナリを動作させる実行基盤はもともとあった。
Wineという割りと昔からあるLinux向けのWindows用のバイナリの実行基盤をベースにゲームを実行できるようにValveが改変したもの
GPU命令の問題。
ではWine以外に、Linux上でゲームを動かすのに足りないパーツはなんだろうか。多くのWindowsゲームは3Dの描画のためにコンピュータに搭載されているGPUを利用する。GPUを利用して3Dモデルを描画するための命令(多くはシェーダーとか機械学習文脈だとカーネル関数と呼ばれている)を実行する仕組みはなんとOSごとに違っており、Windowsでは古くからあるDirect Xという仕組みを利用する。Linux ではOpenGLなどを利用することが多く、Direct XとOpenGLに互換性はないので、Windows用に書かれたDirect Xを利用したゲームはそのままではLinux上では実行することができない。
DVXKがDirect x to Vulkanしてくれる。
Protonではこれを解決するために、DXVKというライブラリを利用する。DXはDirect Xのことであるが、VKはVulkanの略でこれはOpenGLに類似する(互換性はない)比較的新しめの3D計算用のAPIである。最近だとAndroidはVulkanを経由して、画面を描画していたりするらしい。DXVKは、Direct X からVulkanへの命令の変換を肩代わりしてくれる。つまり、WineでWindows用のバイナリを実行できるようにしつつ、ついでにDXVKでGPUへの命令もライブラリを通して変換する
Linuxの場合と同様の処理を行っていることがわかる。
Protonに類似するように、エミュレーション(トランスレーション)レイヤーである。Windows用のバイナリを実行するための変換レイヤーをWineでつくり、それをApple Siliconを搭載したMac上で実行できるようにしたものである。ただしSteam Deckと異なるのは、macOSやiOSで3Dグラフィックスを扱うためのAPIはVulkanではなくMetalであるので、Direct Xの命令をMetalに変換するためのライブラリ (D3DMetal)を実装したことである。もう一つはApple SiliconはARMアーキテクチャのCPUコアを実装しているので、よくあるWindowsマシンがIntel製のCPUを搭載していたとしてそのままバイナリを実行できないのを、Rosetta 2 でこれもトランスレーションして実行できるようにしている点である。
GPTKのインストールは面倒なので、海外の有志の方がGPTKのインストールとWineのボトルの管理をGUIでできる、macOS用のアプリを公開してくれているので、こちらは開発も活発で比較的おすすめ
Mac界隈に昔からあるCrossOverというMac上でWindowsアプリを実行できるアプリを利用する
https://scrapbox.io/files/663b91b77e7f2f001ceb83f7.png
whiskyを使ってみる。
code:sh
brew install --cask whisky
whiskyを立ち上げるとRosettaとwhiskyがインストールされているかの確認画面。
インストールされていないと自動でインストール。
次にBottleを作成。
https://scrapbox.io/files/663b94ac4d1362001dd9302b.png
Download the program you want to run. It should be the Windows version (.exe or .msi);
64-bit programs are preferable.
Click on the bottle you want to install your program into
Press the Run... button in the bottom right
Navigate to where you downloaded your .exe or .msi file in Finder
Select the file and press Open
依存関係などが 1 か所に多数インストールされると煩雑になる可能性があるため、通常はボトルを 1 つのゲームに制限します。
https://scrapbox.io/files/663ba2c951996e001cdac0a6.png
exeが実行できる基盤になっているのがwhisky。
なのでsteamにしてもexeファイルを落としてきて実行する形。
whiskyはwineのレイヤなので。
確かに実行から適当なexeファイル探してきて実行してみたら動いた。
GPTKも同梱されてインストールされてるのでこれで更にGPUもいける。次はsteamを動かしてみる。
https://scrapbox.io/files/663ba4241a2375001dccc985.png